package com.jumi.microservice.state;

import com.jumi.microservice.domain.GoodsDTO;

/**
 * 商品状态管理器接口
 *
 * @author Administrator
 */
public interface GoodsStateManager {

    /**
     * 创建一个商品
     *
     * @param goods
     */
    void create(GoodsDTO goods);

    /**
     * 当前这个商品能否执行编辑操作
     *
     * @param goods 商品
     * @return 能否执行编辑操作
     * @throws Exception
     */
    Boolean canEdit(GoodsDTO goods);

    /**
     * 已上架状态执行编辑商品的操作
     *
     * @param goods 商品
     * @throws Exception
     */
    void putOnShelvesEdit(GoodsDTO goods);


    /**
     * 已下架状态执行编辑商品的操作
     *
     * @param goods 商品
     * @throws Exception
     */
    void pullOffShelvesEdit(GoodsDTO goods);

    /**
     * 判断能否执行上架操作
     *
     * @param goods 商品
     * @return 能否执行上架操作
     * @throws Exception
     */
    Boolean canPutOnShelves(GoodsDTO goods);

    /**
     * 执行上架操作
     *
     * @param goods
     * @throws Exception
     */
    void putOnShelves(GoodsDTO goods);

    /**
     * 判断能否执行下架操作
     *
     * @param goods 商品
     * @return
     * @throws Exception
     */
    Boolean canPullOffShelves(GoodsDTO goods);

    /**
     * 执行下架操作
     *
     * @param goods 商品
     * @throws Exception
     */
    void pullOffShelves(GoodsDTO goods);

    /**
     * 能否执行删除操作
     *
     * @param goods 商品
     * @return
     * @throws Exception
     */
    Boolean canRemove(GoodsDTO goods);

}
